﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.AccesoDatos;
using Onshi.POS.Modelo.Enumeradores;

namespace Onshi.POS.Repositorios
{
    public class RepositorioTipoFormaPago : RepositorioEntidad<TipoFormaPago, Int32>
    {
        #region Constructores

        public RepositorioTipoFormaPago()
            : base()
        {
            servicioDatosTipoFormaPago= new ServicioDatosTipoFormaPago();
        }

        #endregion

        #region Atributos

        private IServicioDatosTipoFormaPago servicioDatosTipoFormaPago;

        #endregion

        #region Propiedades

        private IServicioDatosTipoFormaPago ServicioDatosTipoFormaPago
        {
            get { return servicioDatosTipoFormaPago; }
        }

        #endregion

        #region Metodos

        protected override TipoFormaPago FilaAEntidad(DataRow fila)
        {
            TipoFormaPago tipoformapago = new TipoFormaPago();
            tipoformapago.Id = (Int32)fila["IdTipoFormaPago"];
            tipoformapago.Nombre = (String)fila["Nombre"];
            tipoformapago.CodigoPostal = (String)fila["CodigoPostal"];
            return tipoformapago;
        }

        public override TipoFormaPago DevolverPorId(Int32 id)
        {
            TipoFormaPago entidad = (from TipoFormaPago item in entidades where item.Id == id select item).FirstOrDefault();
            if (entidades != null)
            {
                using (DataSet ds = ServicioDatosTipoFormaPago.TipoFormaPagos_DevolverPorId(id))
                {
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        entidad = FilaAEntidad(ds.Tables[0].Rows[0]);
                        entidades.Add(entidad);
                    }
                }
            }
            return entidad;
        }

        public void Insertar(TipoFormaPago entidad)
        {
            entidad.Id = ServicioDatosTipoFormaPago.TipoFormaPagos_Insertar(entidad.Nombre, entidad.Localidad.Id, entidad.CodigoPostal);
        }

        public void Modificar(TipoFormaPago entidad)
        {
            ServicioDatosTipoFormaPago.TipoFormaPagos_Modificar(entidad.Id, entidad.Nombre, entidad.Localidad.Id, entidad.CodigoPostal);
        }

        public void Eliminar(TipoFormaPago entidad)
        {
            ServicioDatosTipoFormaPago.TipoFormaPagos_Eliminar(entidad.Id);
            entidad = null;
        }

        public List<TipoFormaPago> DevolverTodos()
        {
            using (DataSet ds = ServicioDatosTipoFormaPago.TipoFormaPagos_DevolverTodos())
            {
                entidades = TablaALista(ds.Tables[0]);
            }
            return entidades;
        }

        #endregion
    }
}
